package com.to8to.autotask.server;

import java.util.List;

import org.apache.thrift.TException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import com.alibaba.fastjson.JSON;
import com.to8to.autotask.allocate.ecommercer.AllocateEcommercerTask;
import com.to8to.autotask.allocate.newproject.AllocateNewProjectTask;
import com.to8to.autotask.deduction.ForfeitDeductTask;
import com.to8to.autotask.heartbeat.CustServicerOnline;
import com.to8to.autotask.scheduler.AutoTaskScheduler;
import com.to8to.es.util.LogUtil;
import com.to8to.thrift.crm.autotask.AutoTaskService;

/**
 * AutoTaskService.java
 * 作 者：atom.liu
 * 版 本：v2.0
 * 日 期：2014年11月24日
 * 描 述：对外提供的自动任务的服务实现类。
 */
public class AutoTaskServiceImpl implements AutoTaskService.Iface
{
    private static Logger logger = LoggerFactory.getLogger(AutoTaskServiceImpl.class);

    /**
     * 触发一次自动分配审核客服操作
     */
    @Override
    public void allocateSHKF() throws TException
    {
        logger.info("AutoTaskServiceImpl: allocateSHKF() invoked!");
        AutoTaskScheduler.executeNow(new AllocateNewProjectTask(false));
    }

    /**
     * 触发一次自动分配电商顾问操作
     */
    @Override
    public void allocateDSGW() throws TException
    {
        logger.info("AutoTaskServiceImpl: allocateDSGW() invoked!");
        AutoTaskScheduler.executeNow(new AllocateEcommercerTask(false));
    }

    /**
     * 获取用于分配的客服信息
     * @param type 1家装顾问，2电商顾问
     * @param cityid 城市id 
     * @return userid 客服id； -1表示 没有在线的 或者 这个城市没有负责人
     */
    @Override
    public int getAllocateUser(int type, int cityid)
    {
        logger.info(String.format("AutoTaskServiceImpl: getAllocateUser(%s, %s) invoked!", type, cityid));
        return CustServicerOnline.getAllocateUser(type, cityid);
    }

    /**
     * 分配单个新登记的项目。
     * @param yid 项目id
     * @param phoneId 
     */
    @Override
    public void allocateSHKFWithSingleProject(int yid, String phoneId)
    {
        logger.info(String.format("AutoTaskServiceImpl: allocateSHKFWithSingleProject(%s, %s) invoked!", yid, phoneId));
        AllocateNewProjectTask task = new AllocateNewProjectTask();
        task.setSingle(true);
        task.setYid(yid);
        try
        {
            task.setPhoneId(Long.parseLong(phoneId));
        }
        catch (NumberFormatException e)
        {
            logger.error("传入PhoneId不合法！{} \n {}", e, LogUtil.logStackTrace(e));
            return;
        }
        AutoTaskScheduler.executeNow(task);
    }

    /**
     * 客服在线心跳接口
     * @param uid 客服id
     */
    @Override
    public void activeOnline(int uid)
    {
        logger.trace(String.format("AutoTaskServiceImpl: activeOnline(%s) invoked!", uid));
        CustServicerOnline.heartBeat(uid);
    }

    /**
     * 获取在线的客服id列表 
     */
    @Override
    public List<Integer> getOnlineUser()
    {
        logger.trace("AutoTaskServiceImpl: getOnlineUser() invoked!");
        return CustServicerOnline.getOnline();
    }

    /**
     * 获取在线的客服id列表,json格式 
     */
    public String getOnlineUserJson()
    {
        logger.trace("AutoTaskServiceImpl: getOnlineUser() invoked!");
        List<Integer> list = CustServicerOnline.getOnline();
        return JSON.toJSONString(list);
    }

    /**
     * 是否需要扣滞纳金
     * @param uid 公司id
     * @param yid 项目id
     * @param fz_city 装修公司所在城市
     * @return 0：不需要；1：需要；-1：服务异常；-2：未查到相关信息
     */
    @Override
    public int isCostForfeit(int uid, int yid, int fz_city)
    {
        logger.info(String.format("AutoTaskServiceImpl: isCostForfeit(%s, %s, %s) invoked!", uid, yid, fz_city));
        return ForfeitDeductTask.isCostForfeit(uid, yid, fz_city);
    }
}
